package com.iva.beam;

import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.iva.model.SgMensajes;
import com.iva.model.SgMensajesEnv;
import com.iva.model.TbPeriodoEvaluacion;
import com.iva.model.TbRotacionDesc;
import com.iva.model.VwAlumnosMateria;
import com.iva.model.VwAlumnosUsuario;
import com.iva.model.VwNotas;
import com.iva.model.VwProfActividades;
import com.iva.model.VwRotaciones;
import com.iva.service.findService;
import com.iva.service.mensajeService;
import com.iva.service.tareasService;

@Component("profesorTabMenuBeam")
public class ProfesorTabMenuBeam {
	
	@Autowired
	findService find;
	@Autowired
	tareasService tarea;
	@Autowired
	mensajeService mensaje;
	
	
	private List<VwProfActividades> listVwProfActividadesFilter;
	private List<VwProfActividades> listVwProfActividades;
	private List<VwNotas> listNotasCalificadas;
	
	
	public List<VwProfActividades> getListVwProfActividadesFilter() {
		return listVwProfActividadesFilter;
	}

	public void setListVwProfActividadesFilter(
			List<VwProfActividades> listVwProfActividadesFilter) {
		this.listVwProfActividadesFilter = listVwProfActividadesFilter;
	}

	public List<VwNotas> getListNotasCalificadas() {
		return listNotasCalificadas;
	}

	public void setListNotasCalificadas(List<VwNotas> listNotasCalificadas) {
		this.listNotasCalificadas = listNotasCalificadas;
	}

	public List<VwProfActividades> getListVwProfActividades() {
		return listVwProfActividades;
	}

	public void setListVwProfActividades(
			List<VwProfActividades> listVwProfActividades) {
		this.listVwProfActividades = listVwProfActividades;
	}

	private  List<VwRotaciones> asignacionesMaestro; 
	
	public List<VwRotaciones> getAsignacionesMaestro() {
		return asignacionesMaestro;
	}

	public void setAsignacionesMaestro(List<VwRotaciones> asignacionesMaestro) {
		this.asignacionesMaestro = asignacionesMaestro;
	}

	private VwAlumnosUsuario usuario;
	
	public VwAlumnosUsuario getUsuario() {
		return usuario;
	}

	public void setUsuario(VwAlumnosUsuario usuario) {
		this.usuario = usuario;
	}

	private List<TbPeriodoEvaluacion> listTbPeriodoEvaluacion;
	public List<TbPeriodoEvaluacion> getListTbPeriodoEvaluacion() {
		return listTbPeriodoEvaluacion;
	}

	public void setListTbPeriodoEvaluacion(
			List<TbPeriodoEvaluacion> listTbPeriodoEvaluacion) {
		this.listTbPeriodoEvaluacion = listTbPeriodoEvaluacion;
	}

	private String idMateriaSeccion;
	public String getIdMateriaSeccion() {
		return idMateriaSeccion;
	}

	public void setIdMateriaSeccion(String idMateriaSeccion) {
		this.idMateriaSeccion = idMateriaSeccion;
	}

	public String getIdperiodo() {
		return idperiodo;
	}

	public void setIdperiodo(String idperiodo) {
		this.idperiodo = idperiodo;
	}

	private String idperiodo;
	public List<SgMensajes> getListSgMensajes() {
		return listSgMensajes;
	}

	public void setListSgMensajes(List<SgMensajes> listSgMensajes) {
		this.listSgMensajes = listSgMensajes;
	}

	public List<SgMensajesEnv> getListSgMensajesEnv() {
		return listSgMensajesEnv;
	}

	public void setListSgMensajesEnv(List<SgMensajesEnv> listSgMensajesEnv) {
		this.listSgMensajesEnv = listSgMensajesEnv;
	}

	public SgMensajes getsGMensajes() {
		return sGMensajes;
	}

	public void setsGMensajes(SgMensajes sGMensajes) {
		this.sGMensajes = sGMensajes;
	}

	public SgMensajesEnv getsGMensajesEnv() {
		return sGMensajesEnv;
	}

	public void setsGMensajesEnv(SgMensajesEnv sGMensajesEnv) {
		this.sGMensajesEnv = sGMensajesEnv;
	}

	private List<SgMensajes> listSgMensajes;
	private List<SgMensajesEnv> listSgMensajesEnv;
	private static String TEMPUSER = "FF001";
	private SgMensajes sGMensajes;
	private SgMensajesEnv sGMensajesEnv;
	private boolean hasDescription;
	private int idRotacionDesc;
	private String criterios;
	
	
	public int getIdRotacionDesc() {
		return idRotacionDesc;
	}

	public void setIdRotacionDesc(int idRotacionDesc) {
		this.idRotacionDesc = idRotacionDesc;
	}

	public String getCriterios() {
		return criterios;
	}

	public void setCriterios(String criterios) {
		this.criterios = criterios;
	}

	public boolean isHasDescription() {
		return hasDescription;
	}

	public void setHasDescription(boolean hasDescription) {
		this.hasDescription = hasDescription;
	}

	public  String  ALUMNO_CODIGO;
	
	public  String getALUMNO_CODIGO() {
		return ALUMNO_CODIGO;
	}

	public  void setALUMNO_CODIGO(String aLUMNO_CODIGO) {
		ALUMNO_CODIGO = aLUMNO_CODIGO;
	}

	private List<VwNotas> listNotas;
	public List<VwNotas> getListNotas() {
		return listNotas;
	}
	
	private VwNotas selectVwNotas;
	public VwNotas getSelectVwNotas() {
		return selectVwNotas;
	}

	public void setSelectVwNotas(VwNotas selectVwNotas) {
		this.selectVwNotas = selectVwNotas;
	}

	public void setListNotas(List<VwNotas> listNotas) {
		this.listNotas = listNotas;
	}

	private int activeindex;
	
	public int getActiveindex() {
		return activeindex;
	}

	public void setActiveindex(int activeindex) {
		this.activeindex = activeindex;
	}
	
	private List<VwAlumnosMateria> materiasAlumno;
	
	

	public List<VwAlumnosMateria> getMateriasAlumno() {
			
			return this.materiasAlumno;
					
		}
		public void setMateriasAlumno(List<VwAlumnosMateria> materiasAlumno) {
			this.materiasAlumno = materiasAlumno;
		}


		
		private String horario;
		
		public String getHorario() {
			return horario;
		}

		public void setHorario(String horario) {
			this.horario = horario;
		}

		private String descripcion;
		
		public String getDescripcion() {
			return descripcion;
		}

		public void setDescripcion(String descripcion) {
			this.descripcion = descripcion;
		}

		private String objetivos;
		
		
	public String getObjetivos() {
			return objetivos;
		}

		public void setObjetivos(String objetivos) {
			this.objetivos = objetivos;
		}
		
		
		private int idRotaciones;
		private String seccionMateria;

	public int getIdRotaciones() {
			return idRotaciones;
		}

		public String getSeccionMateria() {
		return seccionMateria;
	}

	public void setSeccionMateria(String seccionMateria) {
		this.seccionMateria = seccionMateria;
	}

		public void setIdRotaciones(int idRotaciones) {
			this.idRotaciones = idRotaciones;
		}

	public String Dirige(int index){
		String tabName =null;
		System.out.println("Ingreso a metodo");

		
        HttpSession session = ( HttpSession ) FacesContext.getCurrentInstance().getExternalContext().getSession( true );
        
        this.usuario = (VwAlumnosUsuario)session.getAttribute("dto");
		this.activeindex = index;
		switch(index){
		case 0:{
			tabName = "maestroTareasTab";
			String sql = " where id.codigoEmp='"+this.usuario.getId().getNombreUsuario()+"' and id.tbActividadIdActividad=12";
			this.listVwProfActividades = tarea.listVwProfActividades(sql);
			String sqlNotas = " where id.codigoEmp = '"+this.usuario.getId().getNombreUsuario()+"' and id.idActividad=12 and id.estadoActividad in('E','O')";
			this.listNotas = tarea.listVwNotas(sqlNotas);
			String sqlCalificadas = " where id.codigoEmp = '"+this.usuario.getId().getNombreUsuario()+"' and id.idActividad=12 and id.estadoActividad='C'";
			this.listNotasCalificadas = tarea.listVwNotas(sqlCalificadas);
			System.out.println("Ingreso Opcion");
		};
			
			break;
		case 1:{
			tabName = "maestroActividadesTab";
			String sql = " where id.codigoEmp='"+this.usuario.getId().getNombreUsuario()+"' and id.tbActividadIdActividad=14";
			String sqlNotas = " where id.codigoEmp = '"+this.usuario.getId().getNombreUsuario()+"' and id.idActividad=14 and id.estadoActividad in('E','O')";
			this.listNotas = tarea.listVwNotas(sqlNotas);
			String sqlCalificadas = " where id.codigoEmp = '"+this.usuario.getId().getNombreUsuario()+"' and id.idActividad=14 and id.actividadReqAutoriza = 1 and id.actividadAutorizada=1";
			this.listNotasCalificadas = tarea.listVwNotas(sqlCalificadas);
			System.out.println("Ingreso Opcion"); 			
			this.listVwProfActividades = tarea.listVwProfActividades(sql);
			
		};
			
			break;
		case 2:{
			tabName = "maestroMensajesTab";
			String query1 = "where codigoReceptor = '"+this.usuario.getId().getNombreUsuario()+"'";
			String query = "where codigoEmisario = '"+this.usuario.getId().getNombreUsuario()+"'";
			this.listSgMensajes = mensaje.listSgMensajes(query1);
			this.listSgMensajesEnv = mensaje.listSgMensajesEnv(query);
		};
		
			break;
		case 3:{
			String sql = "where id.codigoEmp='"+this.usuario.getId().getNombreUsuario()+"'";
			this.listNotas = tarea.listVwNotas(sql);
			this.listTbPeriodoEvaluacion = tarea.listTbPeriodoEvaluacion(null);
			tabName = "maestroNotasTab";
		};
			
			break;
		default :
			System.out.println("error");
			
		}
		
		this.asignacionesMaestro = find.listProfesorMateria(" where id.codigoEmp='"+this.usuario.getId().getNombreUsuario()+"'");
		System.out.println("Sale Opcion");
		return tabName;
	}
	
	public String setContentNotas(VwRotaciones rot){
		this.idRotaciones = rot.getId().getIdSedeSeccionHasMateria();
		this.setSeccionMateria(rot.getId().getSeccionMateria());
		String sql = " where id.codigoEmp='"+this.usuario.getId().getNombreUsuario()+"' and id.tbActividadIdActividad=12 and id.idSedeSeccionHasMateria="+this.idRotaciones;
		this.listVwProfActividadesFilter = tarea.listVwProfActividades(sql);
		
		List<TbRotacionDesc> desc = tarea.listRotacionDesc("where idRotaciones = " + idRotaciones);
		if(!desc.isEmpty()){
			this.hasDescription = true;
			this.idRotacionDesc = desc.get(0).getIdRotacionDesc();
			this.descripcion = desc.get(0).getDescripcion();
			this.horario = desc.get(0).getHorario();
			this.objetivos = desc.get(0).getObjetivos();
		}
		System.out.println(idRotaciones);
		return "dialog:setMateriaDes?modal=true";
		
	}
	
	public void updateMateria(ActionEvent  event)throws Exception{
		TbRotacionDesc desc = new TbRotacionDesc();
		desc.setIdRotaciones(this.idRotaciones);
		desc.setDescripcion(this.descripcion);
		desc.setHorario(this.horario);
		desc.setObjetivos(this.objetivos);
		FacesMessage message = null;
		try {
			if(this.hasDescription){
				desc.setIdRotacionDesc(this.idRotacionDesc);
				tarea.updateRotacionesDesc(desc);
			}else{
				tarea.insertRotacionDesc(desc);	
			}
			
			message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Descripción actualizada",  null);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error al actualizar descripción",  null);
		}
		finally{
			FacesContext.getCurrentInstance().addMessage(null, message);
			this.descripcion = null;
			this.horario = null;
			this.objetivos = null;
		}
		
	}
	
	public void searchResults(){
		System.out.println("id materia "+ idMateriaSeccion);
		System.out.println("id periodo "+idperiodo);
		HttpSession session = ( HttpSession ) FacesContext.getCurrentInstance().getExternalContext().getSession( true );        
        this.usuario = (VwAlumnosUsuario)session.getAttribute("dto");
		String sql = "where id.codigoEmp='"+this.usuario.getId().getNombreUsuario()+"' and id.nombreMateria='" +idMateriaSeccion+ "'";
		this.listNotas = tarea.listVwNotas(sql);
	}
	
	public void tareaResults(){
		System.out.println("id materia "+ idMateriaSeccion);
		
		HttpSession session = ( HttpSession ) FacesContext.getCurrentInstance().getExternalContext().getSession( true );        
        this.usuario = (VwAlumnosUsuario)session.getAttribute("dto");
        
        String sql = " where id.codigoEmp='"+this.usuario.getId().getNombreUsuario()+"' and id.tbActividadIdActividad=12 and id.nombreMateria='" +idMateriaSeccion+ "'";
		this.listVwProfActividades = tarea.listVwProfActividades(sql);
		String sqlNotas = " where id.codigoEmp = '"+this.usuario.getId().getNombreUsuario()+"' and id.idActividad=12 and id.estadoActividad in('E','O') and id.nombreMateria='" +idMateriaSeccion+ "'";
		this.listNotas = tarea.listVwNotas(sqlNotas);
		String sqlCalificadas = " where id.codigoEmp = '"+this.usuario.getId().getNombreUsuario()+"' and id.idActividad=12 and id.estadoActividad='C' and id.nombreMateria='" +idMateriaSeccion+ "'";
		this.listNotasCalificadas = tarea.listVwNotas(sqlCalificadas);
		System.out.println("Filtra por " + idMateriaSeccion);
	}
	
	public void activityResults(){
		System.out.println("id materia "+ idMateriaSeccion);
		
		HttpSession session = ( HttpSession ) FacesContext.getCurrentInstance().getExternalContext().getSession( true );        
        this.usuario = (VwAlumnosUsuario)session.getAttribute("dto");
        
        String sql = " where id.codigoEmp='"+this.usuario.getId().getNombreUsuario()+"' and id.tbActividadIdActividad=14 and id.nombreMateria='" +idMateriaSeccion+ "'";
        this.listVwProfActividades = tarea.listVwProfActividades(sql);
        String sqlNotas = " where id.codigoEmp = '"+this.usuario.getId().getNombreUsuario()+"' and id.idActividad=14 and id.estadoActividad in('E','O') and id.nombreMateria='" +idMateriaSeccion+ "'";
		this.listNotas = tarea.listVwNotas(sqlNotas);
		String sqlCalificadas = " where id.codigoEmp = '"+this.usuario.getId().getNombreUsuario()+"' and id.idActividad=14 and id.actividadReqAutoriza = 1 and id.actividadAutorizada=1 and id.nombreMateria='" +idMateriaSeccion+ "'";
		this.listNotasCalificadas = tarea.listVwNotas(sqlCalificadas);
		
		System.out.println("Filtra por " + idMateriaSeccion);
		
	}
	
}
